home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 April / EnigmA AMIGA RUN 17 (1997)(G.R. Edizioni)(IT)[!][issue 1997-04][EAR-CD].iso / EARCD / text / dtp / FontCatalog103.lha / FontCatalog103.rexx < prev   
OS/2 REXX Batch file  |  1996-11-03  |  18KB  |  622 lines

  1. /*---------------------------------------*/
  2. /* $VER: FontCatalog V1.03 (03 Nov 1996) */
  3. /* ©1996 Michael Merkel                  */
  4. /*---------------------------------------*/
  5.  
  6. /*
  7.    how to use this:
  8.    ----------------
  9.     * copy this into your PageStream3:Scripts/ drawer
  10.     * select "Play Script" in PageStream3 and start FontCatalog
  11.     * if you want to use fixed fontsize you must
  12.       1. activate the "use fixed fontsize" checkbox
  13.       2. specify the fontsize in the horizontal # field!! <- don't forget this!
  14.     * specify the offsets and the sample text
  15.       (you can use "*n" for a newline character. e.g. "aA*nbB" will print:
  16.                                                                             aA
  17.                                                                             bB
  18.        and "*t" for a tabulator)
  19. */
  20.  
  21. OPTIONS RESULTS
  22.  
  23. /* Make sure rexx support is opened */
  24. IF ~SHOW('L','rexxsupport.library') THEN
  25.    CALL ADDLIB('rexxsupport.library',0,-30)
  26. IF ~SHOW('L','softlogik:libs/slarexxsupport.library') THEN
  27.    CALL ADDLIB('softlogik:libs/slarexxsupport.library',0,-30)
  28. ADDRESS 'PAGESTREAM'
  29.  
  30. /* defaults */
  31. fcversion = 'V1.03'
  32. measure = 'pt'
  33. tf.0 = 'FALSE'
  34. tf.1 = 'TRUE'
  35.  
  36. 'GETPAGEMASTERPAGE MASTERPAGE mname'
  37. if (RC = 10) then CALL DOERRORREQUESTER
  38.  
  39. defmeasure = GetDefaultMeasurementSystem()
  40.  
  41. 'GETDIMENSIONS dim MASTERPAGE "'mname'"'
  42. if (dim.orientation = 'PORTRAIT')
  43. then do
  44.     rpagesizex = dim.width
  45.     rpagesizey = dim.height
  46. end
  47. else do
  48.     rpagesizex = dim.height
  49.     rpagesizey = dim.width
  50. end
  51.  
  52. CALL ReadPrefs
  53.  
  54. /* get and count available fonts */
  55.  
  56.  'GETFONTLIST fonts'
  57.  fontnum = RESULT
  58.  
  59. /* get user choices */
  60.  
  61.  CALL DOREQUESTER
  62.  if (ergebnis = cancelhandler)
  63.  then do
  64.     ''defmeasure''
  65.     EXIT
  66.  end
  67.  CALL WritePrefs
  68.  
  69. /* some more defaults and transformations */
  70.  
  71. pagenumber = 1
  72. maxheight = 0
  73. if (ffs = 1) then ffs_size = p2d(numx,measure)
  74. else              ffs_size = 30
  75. pagesizex = rpagesizex
  76. pagesizey = rpagesizey
  77. leftgap = p2d(WORD(rgapsnsize,1),measure)
  78. rightgap = p2d(WORD(rgapsnsize,2),measure)
  79. topgap = p2d(WORD(rgapsnsize,3),measure)
  80. bottomgap = p2d(WORD(rgapsnsize,4),measure)
  81. gap = p2d(WORD(rgapsnsize,5),measure)
  82. txtsize = p2d(WORD(rgapsnsize,6),measure)
  83. startx = leftgap
  84. starty = topgap
  85.  
  86. if (ffs = 0)
  87. then do
  88.  
  89.     /* horizontal and vertical sizes for one sample */
  90.     psx = (pagesizex-leftgap-rightgap-(numx-1)*gap) / numx
  91.     psy = (pagesizey-topgap-bottomgap-(numy-1)*gap-numy*txtsize) / numy
  92.  
  93.     /* horizontalsize/verticalsize */
  94.     psf = psx / psy
  95.  
  96.     /* number of samples/page */
  97.     anzp = numx * numy
  98. end
  99.  
  100. num = 0
  101.  
  102. /* draw border for first page */
  103. CALL DrawPageBorder
  104.  
  105. BusyReq = OpenBusyMessage('getting pictures ...')
  106. 'REFRESH OFF'
  107.  
  108. CALL DoAllFonts
  109.  
  110. CALL CLEANUP
  111. EXIT
  112.  
  113. DoAllFonts:
  114.     /* current number of pics per page */
  115.     nppp = 0
  116.  
  117.     do num = 0 to fontnum-1
  118.         lastpic = 0
  119.         CALL AddObject(fonts.num)
  120.  
  121.         if (lastpic = 1)
  122.         then do    /* letztes Bild auf Seite bearbeitet */
  123.             Call SetBusyMessage(BusyReq,'refreshing display...')
  124.             'REFRESH ON'
  125.             'REFRESHWINDOW'
  126.  
  127.             if (print = 1) then CALL PrintPage
  128.             else 'DISPLAY PAGE NEXT'
  129.             pagenumber = pagenumber + 1
  130.             nppp = 0
  131.             CALL DrawPageBorder
  132.  
  133.             'REFRESH OFF'
  134.         end
  135.     end
  136.  
  137.     if ((nppp > 0) & (print = 1))
  138.     then do    /* ready but not printed yet */
  139.         Call SetBusyMessage(BusyReq,'refreshing display...')
  140.         'REFRESH ON'
  141.         'REFRESHWINDOW'
  142.  
  143.         CALL PrintPage
  144.     end
  145. RETURN
  146.  
  147. AddObject:
  148.     ARG name
  149.  
  150.     CALL getbusy(name||' (#'||num||')')
  151.  
  152.     d1 = startx
  153.     d2 = starty
  154.  
  155.     call DrawTextObject
  156.  
  157.     pwidth = posi.right - posi.left
  158.     pheight = posi.bottom - posi.top
  159.  
  160.     if (pheight>maxheight) then maxheight = pheight
  161.  
  162.     /* textframe anpassen -> no fixed fontsize! */
  163.     if (ffs=0)
  164.     then do
  165.         gsf = pwidth / pheight
  166.         if (gsf > psf) then factor = psx / pwidth
  167.         else                factor = psy / pheight
  168.  
  169.         newpwidth = factor * pwidth - 2     /* 1 point less on each side (for nonborder overlapping) */
  170.         newpheight = factor * pheight - 2
  171.  
  172.         centerdeltax = (psx - newpwidth) / 2
  173.         centerdeltay = (psy - newpheight) / 2
  174.  
  175.         d3 = d1 + psx
  176.         d4 = d2 + psy
  177.  
  178.         if ((d3 - 1) > (pagesizex - rightgap)) /* well, it's too far right! */
  179.         then do
  180.             startx = leftgap
  181.             starty = d4 + gap + txtsize
  182.             d1 = startx
  183.             d2 = starty
  184.             d3 = d1 + psx
  185.             d4 = d2 + psy
  186.         end
  187.  
  188.         if ((d4 + txtsize - 1) > (pagesizey - bottomgap)) /* now it's too far down! */
  189.         then do
  190.             startx = leftgap
  191.             starty = topgap
  192.             lastpic = 1       /* last picture already placed! print or flip page and go on... */
  193.             num = num - 1
  194.             'DELETEOBJECT OBJECTID 'txtid
  195.             RETURN
  196.         end
  197.  
  198.         startx = d3 + gap
  199.  
  200.         newl = d1 + centerdeltax
  201.         newt = d2 + centerdeltay
  202.         newr = newl + newpwidth
  203.         newb = newt + newpheight
  204.  
  205.         'EDITTEXTOBJ POSITION 'newl newt newr newb' OBJECTID 'txtid
  206.     end
  207.  
  208.     /* textframes berechnen -> fixed fontsize! */
  209.     else do
  210.         d3 = d1 + pwidth + 6
  211.         d4 = d2 + pheight + 6
  212.  
  213.         if ((d3 - 1) > (pagesizex - rightgap)) /* it's too far right! */
  214.         then do
  215.             startx = leftgap
  216.             starty = d2 + maxheight + 6 + gap + txtsize
  217.             d1 = startx
  218.             d2 = starty
  219.             d3 = d1 + pwidth + 6
  220.             d4 = d2 + pheight + 6
  221.             if ((d3 - 1) > (pagesizex - rightgap)) then call ErrorExit
  222.             maxheight = 0
  223.         end
  224.  
  225.         if ((d4 + txtsize - 1) > (pagesizey - bottomgap))
  226.         then do
  227.             startx = leftgap
  228.             starty = topgap
  229.             if ((starty + pheight + 6 + txtsize - 1) > (pagesizey - bottomgap)) then call ErrorExit
  230.             num = num - 1
  231.             mayheight = 0
  232.             lastpic = 1
  233.             'DELETEOBJECT OBJECTID 'txtid
  234.             RETURN
  235.         end
  236.  
  237.         startx = d3 + gap
  238.  
  239.         newl = d1 + 3
  240.         newt = d2 + 3
  241.         newr = d3 - 3
  242.         newb = d4 - 3
  243.         'EDITTEXTOBJ POSITION 'newl newt newr newb' OBJECTID 'txtid
  244.     end
  245.  
  246.     if (txtsize > 0) then do
  247.         'DRAWTEXTOBJ 'd1 d4' INFRONT'
  248.          txtid = RESULT
  249.         'SELECTTEXT AT 'd1 d4' FRONTMOST'
  250.  
  251.         'BEGINCOMMANDCAPTURE'
  252.          'SETTRACKTABLE NONE'
  253.          'SETLEADING RELATIVE 100%'
  254.          'SETTYPESIZE 'txtsize
  255.          'SETPARAGRAPHSTYLE "FontName"'
  256.         'ENDCOMMANDCAPTURE'
  257.  
  258.         'INSERT "'name'"'
  259.         'GETTEXTOBJ POSITION txtpos OBJECTID 'txtid
  260.          txtp2.left   = txtpos.left
  261.          txtp2.top    = txtpos.top
  262.          txtp2.bottom = txtpos.bottom
  263.          txtp2.right  = txtpos.right
  264.  
  265.         txtwidth = txtp2.right - txtp2.left
  266.         if (txtwidth > (d3-d1)) then 'EDITTEXTOBJ POSITION 'txtp2.left' 'txtp2.top' 'd3' 'txtp2.bottom' OBJECTID 'txtid
  267.     end
  268.  
  269.     'DRAWBOX 'd1 d2 d3 d4
  270.     'SETSTROKEWEIGHT 1pt'
  271.     nppp = nppp + 1
  272. RETURN
  273.  
  274. DrawTextObject:
  275.     'DRAWTEXTOBJ 'd1 d2' INFRONT'
  276.      tid = RESULT
  277.     'SELECTTEXT AT 'd1 d2' FRONTMOST'
  278.  
  279.     if (num > 0) then 'PASTETEXT'               /* puffer ausgeben */
  280.     else do                                     /* nur _einmal_ text generieren */
  281.         do fsk = 1 to LENGTH(fsample)
  282.             ifsample = SUBSTR(fsample,fsk,1)
  283.             if ifsample = '*'
  284.             then do
  285.                 fsk = fsk+1
  286.                 i2fsample = SUBSTR(fsample,fsk,1)
  287.                 SELECT
  288.                     WHEN i2fsample = 'n' THEN 'INSERTCONTROL NEWLINE'
  289.                     WHEN i2fsample = 't' THEN 'INSERTCONTROL TAB'
  290.                     WHEN i2fsample = '*' THEN 'INSERT "*"'
  291.                     OTHERWISE 'INSERT "*'ifsample'"'
  292.                 end
  293.             end
  294.             else 'INSERT "'ifsample'"'
  295.         end
  296.         'SELECTTEXT ALL'
  297.         'BEGINCOMMANDCAPTURE'
  298.          'SETTRACKTABLE NONE'
  299.          'SETLEADING RELATIVE 100%'
  300.          'SETTYPESIZE 'ffs_size
  301.         'ENDCOMMANDCAPTURE'
  302.         if (num=0) then 'COPYTEXT'
  303.     end
  304.  
  305.      'SETFONT "'name'"'
  306.  
  307.     'GETTEXTOBJ POSITION posi OBJECTID 'tid
  308.      txtid = RESULT
  309. RETURN
  310.  
  311. DrawPageBorder:
  312.      d1 = leftgap - 5
  313.      d2 = topgap - 5
  314.      d3 = pagesizex-rightgap + 5
  315.      d4 = pagesizey-bottomgap + 5
  316.  
  317.     'DRAWBOX 'd1 d2 d3 d4
  318.     'SETSTROKEWEIGHT 3pt'
  319.  
  320.      d4 = d4 + 2
  321.     'DRAWTEXTOBJ 'd1 d4' INFRONT'
  322.      txtid = RESULT
  323.     'SELECTTEXT AT 'd1 d4' FRONTMOST'
  324.      bottomtxtsize = 12
  325.      bottomtwidth = d3 - d1
  326.  
  327.     'BEGINCOMMANDCAPTURE'
  328.      'SETTRACKTABLE NONE'
  329.      'SETLEADING RELATIVE 100%'
  330.      'SETTYPESIZE "'bottomtxtsize'"'
  331.     'ENDCOMMANDCAPTURE'
  332.  
  333.     'INSERT "FontCatalog '||fcversion||' - ©1996 Michael Merkel"'
  334.     'SETTABRULER "RIGHT" 'bottomtwidth
  335.     'INSERTCONTROL TAB'
  336.     'INSERT "Page 'pagenumber'"'
  337. RETURN
  338.  
  339. PrintPage:
  340.     output.0 = 'GRAYSCALE'
  341.     output.1 = 'COLOR'
  342.  
  343.     Call SetBusyMessage(BusyReq,'printing page...')
  344.  
  345.     if (prscale = 0) then do
  346.          'PRINTDOCUMENT PAGE "" OUTPUT 'output.prmethod' SCALE "ACTUAL"'
  347.     end
  348.     if (prscale = 1) then do
  349.          'PRINTDOCUMENT PAGE "" OUTPUT 'output.prmethod' SCALE "FULLPAGE"'
  350.     end
  351.  
  352.     'SELECTOBJECT ALL'
  353.     'DELETEOBJECT'
  354. RETURN
  355.  
  356. DOREQUESTER:
  357.     filehandler = 0
  358.     ergebnis = filehandler
  359.     do until ((ergebnis = okhandler) | (ergebnis = cancelhandler))
  360.         'ALLOCAREXXREQUESTER "FontCatalog '||fcversion||' - ©1996 Michael Merkel" 350 280'
  361.          reqhandle = RESULT
  362.         'ADDAREXXGADGET 'reqhandle' EXIT 10  260 70 LABEL "_Make"'
  363.          okhandler = RESULT
  364.         'ADDAREXXGADGET 'reqhandle' EXIT 270 260 70 LABEL "_Cancel"'
  365.          cancelhandler = RESULT
  366.         'ADDAREXXGADGET 'reqhandle' EXIT 115 260 120 LABEL "_Print Settings"'
  367.          pprefshandler = RESULT
  368.  
  369.         'ADDAREXXGADGET 'reqhandle' STRING 250  5  55 STRING "'numx'" LABEL "# of font samples horizontal:"'
  370.          numx_gadget = RESULT
  371.         'ADDAREXXGADGET 'reqhandle' STRING 250 20  55 STRING "'numy'" LABEL "# of font samples vertical:  "'
  372.          numy_gadget = RESULT
  373.  
  374.         'ADDAREXXGADGET 'reqhandle' CHECKBOX 10  35 250  CHECKED "'tf.ffs'" LABEL "use fixed fontsize (# horizontal!)"'
  375.          ffs_gadget = RESULT
  376.  
  377.         'ADDAREXXGADGET 'reqhandle' TEXT   10  55 200 STRING "(hint: 'fontnum' fonts found!)"'
  378.  
  379.         'ADDAREXXGADGET 'reqhandle' TEXT   10  80 112 STRING "page offsets:"'
  380.  
  381.         'ADDAREXXGADGET 'reqhandle' STRING 63 100 70 STRING "'WORD(rgapsnsize,1)'"  LABEL "left:"'
  382.          rleftgap_gadget = RESULT
  383.         'ADDAREXXGADGET 'reqhandle' STRING 63 115 70 STRING "'WORD(rgapsnsize,2)'" LABEL "right:"'
  384.          rrightgap_gadget = RESULT
  385.         'ADDAREXXGADGET 'reqhandle' STRING 200 100 70 STRING "'WORD(rgapsnsize,3)'"    LABEL "top:"'
  386.          rtopgap_gadget = RESULT
  387.         'ADDAREXXGADGET 'reqhandle' STRING 200 115 70 STRING "'WORD(rgapsnsize,4)'" LABEL "bottom:"'
  388.          rbottomgap_gadget = RESULT
  389.  
  390.         'ADDAREXXGADGET 'reqhandle' STRING 175 140 50 STRING "'WORD(rgapsnsize,5)'" LABEL "gap between samples:"'
  391.          rgap_gadget = RESULT
  392.  
  393.         'ADDAREXXGADGET 'reqhandle' STRING 175 160 50 STRING "'WORD(rgapsnsize,6)'" LABEL "namesize (0 = none):"'
  394.          rtxtsize_gadget = RESULT
  395.  
  396.         'ADDAREXXGADGET 'reqhandle' STRING   10 200 330 STRING "'fsample'" LABEL "specify the sample text:" LABELPOS ABOVELEFT'
  397.          fsample_gadget = RESULT
  398.  
  399.         'ADDAREXXGADGET 'reqhandle' CHECKBOX 10 230 10  CHECKED "'tf.print'" LABEL "print every single page"'
  400.          print_gadget = RESULT
  401.         'ADDAREXXGADGET 'reqhandle' TEXT     30 240 240 STRING "(instead of collecting them)"'
  402.  
  403.         'DOAREXXREQUESTER 'reqhandle
  404.          ergebnis = RESULT
  405.  
  406.         'GETAREXXGADGET 'reqhandle' 'numx_gadget' STRING'
  407.          numx = RESULT
  408.         'GETAREXXGADGET 'reqhandle' 'numy_gadget' STRING'
  409.          numy = RESULT
  410.  
  411.         'GETAREXXGADGET 'reqhandle' 'ffs_gadget' CHECKED'
  412.          ffs = RESULT
  413.  
  414.         'GETAREXXGADGET 'reqhandle' 'rleftgap_gadget' STRING'
  415.          rgapsnsize = SPACE(RESULT,0)
  416.         'GETAREXXGADGET 'reqhandle' 'rrightgap_gadget' STRING'
  417.          rgapsnsize = rgapsnsize SPACE(RESULT,0)
  418.         'GETAREXXGADGET 'reqhandle' 'rtopgap_gadget' STRING'
  419.          rgapsnsize = rgapsnsize SPACE(RESULT,0)
  420.         'GETAREXXGADGET 'reqhandle' 'rbottomgap_gadget' STRING'
  421.          rgapsnsize = rgapsnsize SPACE(RESULT,0)
  422.  
  423.         'GETAREXXGADGET 'reqhandle' 'rgap_gadget' STRING'
  424.          rgapsnsize = rgapsnsize SPACE(RESULT,0)
  425.         'GETAREXXGADGET 'reqhandle' 'rtxtsize_gadget' STRING'
  426.          rgapsnsize = rgapsnsize SPACE(RESULT,0)
  427.         'GETAREXXGADGET 'reqhandle' 'fsample_gadget' STRING'
  428.          fsample = RESULT
  429.         'GETAREXXGADGET 'reqhandle' 'print_gadget' CHECKED'
  430.          print = RESULT
  431.  
  432.         'FREEAREXXREQUESTER 'reqhandle
  433.  
  434.         if (ergebnis = pprefshandler) then CALL PrintSettings
  435.     end
  436. RETURN
  437.  
  438. PrintSettings:
  439.     'ALLOCAREXXREQUESTER "Please set the settings for printing ..." 230 80'
  440.      reqhandle2 = RESULT
  441.     'ADDAREXXGADGET 'reqhandle2' EXIT 10  60 70 LABEL "_Ok"'
  442.      okhandler2 = RESULT
  443.     'ADDAREXXGADGET 'reqhandle2' EXIT 150 60 70 LABEL "_Cancel"'
  444.      cancelhandler2 = RESULT
  445.  
  446.     'ALLOCAREXXLIST'
  447.      rexxlist2 = RESULT
  448.     'ADDAREXXLIST 'rexxlist2' "Grayscale"'
  449.     'ADDAREXXLIST 'rexxlist2' "Color"'
  450.     'ADDAREXXGADGET 'reqhandle2' CYCLE 75 10 100 LABEL "Method:"'
  451.      prmethod_gadget = RESULT
  452.     'SETAREXXGADGET 'reqhandle2' 'prmethod_gadget' LIST 'rexxlist2' CURRENT 'prmethod
  453.  
  454.     'ALLOCAREXXLIST'
  455.      rexxlist3 = RESULT
  456.     'ADDAREXXLIST 'rexxlist3' "Actual Size"'
  457.     'ADDAREXXLIST 'rexxlist3' "Scale To Fit"'
  458.     'ADDAREXXGADGET 'reqhandle2' CYCLE 75 30 130 LABEL "Scale:"'
  459.      prscale_gadget = RESULT
  460.     'SETAREXXGADGET 'reqhandle2' 'prscale_gadget' LIST 'rexxlist3' CURRENT 'prscale
  461.  
  462.     'DOAREXXREQUESTER 'reqhandle2
  463.      ergebnis2 = RESULT
  464.  
  465.     if (ergebnis2 = okhandler2)
  466.     then do
  467.         'GETAREXXGADGET 'reqhandle2' 'prmethod_gadget' CURRENT'
  468.          prmethod = RESULT
  469.         'GETAREXXGADGET 'reqhandle2' 'prscale_gadget' CURRENT'
  470.          prscale = RESULT
  471.     end
  472.  
  473.     'FREAREXXLIST 'rexxlist2
  474.     'FREAREXXLIST 'rexxlist3
  475.     'FREEAREXXREQUESTER 'reqhandle2
  476. RETURN
  477.  
  478. DOERRORREQUESTER:
  479.     'ALLOCAREXXREQUESTER "Error!" 300 50'
  480.      reqhandle = RESULT
  481.     'ADDAREXXGADGET 'reqhandle' EXIT 115 30 70 LABEL "_Ok"'
  482.      dummy = RESULT
  483.  
  484.     'ADDAREXXGADGET 'reqhandle' TEXT 10 10 280 STRING "Please open a new document first!"'
  485.  
  486.     'DOAREXXREQUESTER 'reqhandle
  487.      dummy = RESULT
  488.  
  489.     'FREEAREXXREQUESTER 'reqhandle
  490.     exit
  491. RETURN
  492.  
  493. ErrorExit:
  494.     'ALLOCAREXXREQUESTER "FATAL ERROR!" 330 70'
  495.      reqhandle = RESULT
  496.     'ADDAREXXGADGET 'reqhandle' EXIT 115 50 70 LABEL "_Ok"'
  497.      dummy = RESULT
  498.  
  499.     'ADDAREXXGADGET 'reqhandle' TEXT 10 10 300 STRING "One font is too big!"'
  500.     'ADDAREXXGADGET 'reqhandle' TEXT 10 30 300 STRING "Please restart with smaller fontsize!"'
  501.  
  502.     'DOAREXXREQUESTER 'reqhandle
  503.      dummy = RESULT
  504.  
  505.     'FREEAREXXREQUESTER 'reqhandle
  506.     call CLEANUP
  507. EXIT
  508.  
  509. SetBusyMessage:
  510.     ARG BReq,BMess
  511.     'SETBUSYREQUESTER 'BReq' MESSAGE "'BMess'"'
  512. RETURN
  513.  
  514. OpenBusyMessage:
  515.     ARG BMess
  516.     BReq = 0
  517.     'OPENBUSYREQUESTER MESSAGE "'BMess'" THERMOMETER DISABLED ABORT ENABLED'
  518.      BReq=result
  519. RETURN BReq
  520.  
  521. GETBUSY:
  522.     ARG messname
  523.  
  524.     if (length(messname) > 27)
  525.     then mess = '...'||right(messname,25)
  526.     else mess = messname
  527.  
  528.     Call SetBusyMessage(BusyReq,mess)
  529.     'GETBUSYREQUESTER 'BusyReq
  530.     if (result=1) then do
  531.         if (npp = 0) then do
  532.             'SELECTOBJECT ALL'
  533.             'DELETEOBJECT'
  534.             'DISPLAY PAGE PREVIOUS'
  535.         end
  536.         CALL CLEANUP
  537.     end
  538. RETURN
  539.  
  540. CLEANUP:
  541.     if (BusyReq>0) then 'CLOSEBUSYREQUESTER 'BusyReq
  542.  
  543.     /* reset the measurementsystem to the saved one!! */
  544.     ''defmeasure''
  545.  
  546.     'REFRESH ON'
  547.     'REFRESHWINDOW'
  548. EXIT
  549.  
  550. ReadPrefs:
  551.     ok = Open('Prefs','PageStream3:Scripts/FontCatalog.prefs','R')
  552.     if (ok = 1)
  553.     then do
  554.         dummy = ReadLn('Prefs')
  555.         if (right(dummy,4) >= 1.02)
  556.         then do
  557.             say 'correct version! reading old prefs...'
  558.  
  559.             numx = ReadLN('Prefs')
  560.             numy = ReadLN('Prefs')
  561.             ffs = ReadLN('Prefs')
  562.             rgapsnsize = ReadLN('Prefs')
  563.             fsample = ReadLN('Prefs')
  564.  
  565.             print = ReadLN('Prefs')
  566.             prscale = ReadLN('Prefs')
  567.             pcpread = 1
  568.         end
  569.         else do
  570.             pcpread = 0
  571.             say 'old prefsfile detected! -> default values'
  572.             fsample = '!OLD PREFSFILE -> USING DEFAULTS!'
  573.         end
  574.         cl = Close('Prefs')
  575.     end
  576.     else do
  577.         pcpread = 0
  578.         say 'no prefsfile! -> default values'
  579.     end
  580.     if (pcpread = 0)
  581.     then do
  582.         numx = 6
  583.         numy = 8
  584.         ffs = 0
  585.         rgapsnsize = '2cm 2cm 2cm 2.5cm 1mm 6pt'
  586.         fsample = 'aA*nbB'
  587.  
  588.         print = 0
  589.         prscale = 0
  590.     end
  591. RETURN
  592.  
  593. WritePrefs:
  594.     ok = Open('Prefs','PageStream3:Scripts/FontCatalog.prefs','W')
  595.     if (ok = 1) then do
  596.         say 'writing prefs...'
  597.         WriteLN('Prefs','TCP'||fcversion)
  598.         WriteLN('Prefs',numx)
  599.         WriteLN('Prefs',numy)
  600.         WriteLN('Prefs',ffs)
  601.  
  602.         WriteLN('Prefs',rgapsnsize)
  603.  
  604.         WriteLN('Prefs',fsample)
  605.  
  606.         WriteLN('Prefs',print)
  607.         WriteLN('Prefs',prscale)
  608.         cl = Close('Prefs')
  609.         end
  610.     else do
  611.         say 'error writing prefs file "FontCatalog.prefs"'
  612.     end
  613. RETURN
  614.  
  615. GetDefaultMeasurementSystem:
  616.     PROCEDURE
  617.  
  618.     'GETMEASUREMENTS COORDINATE stemc RELATIVE rel TEXT tex FROM fro'
  619.      st = 'SETMEASUREMENTS COORDINATE 'stemc.horizontal stemc.vertical' RELATIVE 'rel' TEXT 'tex' FROM 'fro
  620.     'SETMEASUREMENTS COORDINATE POINTS SAMEAS RELATIVE SAMEAS TEXT POINTS FROM PAGE'
  621. RETURN st
  622.